// 返回一个函数，该函数将返回任何传入对象的指定属性。 path 可以指定为简单 key（键），或者指定为对象键或数组索引的数组，用于深度属性提取

import isArray from "./isArray";
import { Io } from "./extendOwn";

export default function property(path) {
  if (!isArray(path)) {
    return shallowProperty(path)
  }
  return function (obj) {
    return deepGet(obj, path);
  };
}

export function shallowProperty(key: string | number) {
  return function <T>(obj: Io): T | undefined {
    return obj == null ? void 0 : obj[key]
  }
}

export function deepGet(obj: Io, path: any[]) {
  var length = path.length;
  for (var i = 0; i < length; i++) {
    if (obj == null) return void 0;
    obj = obj[path[i]];
  }
  return length ? obj : void 0;
}
